package br.com.roteador.usuario;

import java.util.List;

import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;

import br.com.roteador.persistence.AbstractDAO;

@Named("usuarioDAO")
public class UsuarioDAO extends AbstractDAO {

	private static final long serialVersionUID = -196738644541630320L;
	
	public UsuarioDAO(EntityManager manager) {
		this.manager = manager;
	}
	
	public UsuarioDAO(){}

	public Usuario recuperaUsuariosPorEmail(String email) {
		CriteriaBuilder qb = manager.getCriteriaBuilder();
		CriteriaQuery<Usuario> cq = qb.createQuery(Usuario.class);
		Root<Usuario> tb = cq.from(Usuario.class);
		cq.select(tb);
		cq.where(qb.equal(tb.get("email"), email));
		Query query = manager.createQuery(cq);
		return (Usuario) recuperaRegistro(query);
	}
	
	public List<Usuario> recuperaUsuarios() {
		CriteriaBuilder qb = manager.getCriteriaBuilder();
		CriteriaQuery<Usuario> cq = qb.createQuery(Usuario.class);
		Root<Usuario> tb = cq.from(Usuario.class);
		cq.select(tb);
		Query query = manager.createQuery(cq);
		return (List<Usuario>) recuperaLista(query);
	}

	public Usuario recuperaUsuarioPorEmail(String email) {
		CriteriaBuilder qb = manager.getCriteriaBuilder();
		CriteriaQuery<Usuario> cq = qb.createQuery(Usuario.class);
		Root<Usuario> tb = cq.from(Usuario.class);
		cq.select(tb);
		cq.where(qb.equal(tb.get("email"), email));
		Query query = manager.createQuery(cq);
		return (Usuario) recuperaRegistro(query);
	}
	
}